草庐IT

Rust 生命周期

全部标签

一个时钟周期内的 C++ 字符串比较

是否可以在单个处理器周期内比较整个内存区域?更准确地说,是否可以使用某种MMX汇编指令在一个处理器周期内比较两个字符串?或者strcmp的实现是否已经基于该优化?编辑:或者是否可以指示C++编译器删除重复的字符串,以便可以简单地通过它们的内存位置来比较字符串?而不是memcmp(a,b)由a==b比较(假设a和b都是nativeconstchar*字符串)。 最佳答案 只需使用标准Cstrcmp()或C++std::string::operator==()进行字符串比较。它们的实现相当不错,并且可能被编译成一个高度优化的程序集,即使

c++ - 使用 Boost.Asio 时确保有效对象生命周期的最佳方法是什么?

最近玩了很多Boost.Asio。我非常喜欢这个库,因为它提供了一种从当今多核系统中榨取性能的绝妙方法。我曾多次问过自己一个问题,我认为在使用Asio进行异步调用时,关于对象生命周期/所有权的问题值得一提。我反复遇到的问题是,您经常不得不“过期”一个仍然有异步回调待处理的对象。如果该对象在调用回调之前超出范围,则不可避免地会发生故障。为了解决这个问题,我使用boost::enable_shared_from_this模板作为大多数基于asio的类的基类。这工作正常,但有点麻烦:通常这也意味着保护构造函数并向类添加工厂方法以确保在shared_ptr内创建所有实例。我只是想知道其他人是如

c++ - 延长临时工的生命周期

允许这样做的设计原理是什么constFoo&a=function_returning_Foo_by_value();但不是这个Foo&a=function_returning_Foo_by_value();?第二行可能出现什么问题(第一行不会出现问题)? 最佳答案 我会回答你的问题...反过来。为什么他们允许Fooconst&foo=fooByValue();以开头?它使生活(在某种程度上)更轻松,但会在各处引入潜在的未定义行为。Fooconst&fooByReference(){returnfooByValue();//error

c++ - Rust 迭代器和 C++ 迭代器之间的主要区别是什么?

关闭。这个问题需要更多focused.它目前不接受答案。想要改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭4年前。ImprovethisquestionC++迭代器的一个典型例子是指针,它可以用来指向C数组中的一个元素,如下所示:intarray[]={1,2,3,4};int*begin=std::begin(array);//Startingiteratorint*end=std::end(array)//Endingiteratorfor(int*i=begin;i这很简单。来自cplusplus.com的迭代器的定义是Aniteratorisa

C++ 等价于 Rust 的 Result<T, E> 类型?

我喜欢在我的C++代码中使用std::experimental::optional,但问题是value_or要求默认值与可选值的类型相同。当我想要一个包含int或包含错误消息的可选项时,这不会很好。我想我可以使用一个带有bool值的union结构来指示该值是否存在或者它是一个错误,但如果C++有一个Result肯定会很好。像Rust这样的类型。有没有这样的类型?为什么Boost没有实现它?Result确实比Option有用得多,而且Boost的人肯定知道它的存在。也许我会去阅读Rust实现,然后将其复制到C++?例如://Functioneitherreturnsafiledescri

c++ - 通过获取对子对象的引用来延长临时对象的生命周期

cppreference.com使用的语言之间存在细微差别。通过C++11Standard关于临时对象的生命周期何时延长(强调我的)。来自cppreference.com:Wheneverareferenceisboundtoatemporaryortoabasesubobjectofatemporary,thelifetimeofthetemporaryisextendedtomatchthelifetimeofthereference,来自TheC++11Standard:Thesecondcontextiswhenareferenceisboundtoatemporary.The

C++ 常量引用生命周期(容器适配器)

我的代码如下所示:classT{};classcontainer{constT&first,T&second;container(constT&first,constT&second);};classadapter:T{};container(adapter(),adapter());我认为常量引用的生命周期就是容器的生命周期。但是,如果不是这样,适配器对象在容器创建后被销毁,留下悬空引用。什么是正确的生命周期?适配器临时对象的堆栈范围是容器对象的范围还是容器构造函数的范围?如何正确实现绑定(bind)临时对象到类成员引用?谢谢 最佳答案

C++11:基于范围的 for 语句: "range-init"生命周期?

在最新的C++标准中,它暗示:for(foo:bar)baz;等价于:{auto&&r=bar;for(autoit=r.begin(),end=r.end();it!=end;++it){foo=*it;baz;}}当上面的bar是一个返回集合的函数调用时,例如:vectorboo();即for(autobo:boo())...这条线不就变成了:auto&&r=boo();...于是boo()的临时返回值在语句“auto&&r=boo()”的末尾被销毁,然后r是循环入口处的挂起引用。??这个推理正确吗?如果没有,为什么不呢? 最佳答案

c++ - 延长临时工生命周期的理由是什么?

在C++中,可以通过将临时值绑定(bind)到引用来延长其生命周期:Foomake_foo();{Fooconst&r1=make_foo();Foo&&r2=make_foo();//...}//bothobjectsaredestroyedhere为什么允许这样做?这解决了什么问题?我在DesignandEvolution中找不到对此的解释(例如6.3.2:临时生命周期)。我也找不到任何关于此的先前问题(thisone最接近)。此功能有些不直观,并且具有微妙的故障模式。例如:Fooconst&id(Fooconst&x){returnx;}//lookslikeafinefunct

c++ - 生命周期延长和条件运算符

locallvaluereferences-to-const和rvaluereferences可以延长临时对象的生命周期:conststd::string&a=std::string("hello");std::string&&b=std::string("world");当初始化器不是一个简单的表达式,而是使用条件运算符时,这是否也有效?std::string&&c=condition?std::string("hello"):std::string("world");如果其中一个结果是临时对象,而另一个不是,该怎么办?std::stringd="hello";conststd::s